#!/usr/bin/env python3
import asyncio

import logging
from aiogram import Bot, Dispatcher, F
from aiogram.types import BotCommand, BotCommandScopeDefault, Message
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext
from aiogram.filters import Command
from dotenv import load_dotenv
import os

# Загружаем переменные окружения из файла .env
load_dotenv()

# Получаем переменные окружения
API_TOKEN = os.getenv("TG_BOT_KEY")
ADMIN_ID = int(os.getenv("ADMIN_ID"))

dp = Dispatcher()

# States
class FormState(StatesGroup):
    waiting_for_title = State()
    waiting_for_source = State()
    waiting_for_images = State()

# Handlers
@dp.message(Command('info'))
async def info(message: Message):
    await message.answer("Вот наш утвержденный контент-план.")
    await message.answer("https://docs.google.com/spreadsheets/d/11eCCtPreaig45cHcL3JdJ8I_TK_J7X9xw39zXZ2Uqzk/edit#gid=0")

@dp.message(Command('add'))
async def start(message: Message, state: FSMContext):
    await state.set_state(FormState.waiting_for_title)
    await message.answer("Привет! Отправь мне заголовок новости.")

@dp.message(FormState.waiting_for_title)
async def process_title(message: Message, state: FSMContext):
    await state.update_data(title=message.text)
    await state.update_data(user=message.from_user.username)
    await state.set_state(FormState.waiting_for_source)
    await message.answer("Отлично! Теперь отправь мне ссылку на источник новости.")

@dp.message(FormState.waiting_for_source)
async def process_source(message: Message, state: FSMContext):
    await state.update_data(source=message.text)
    await state.set_state(FormState.waiting_for_images)
    await message.answer("Спасибо! Если у вас есть картинки, отправьте их сейчас. Или отправьте /skip если нет.")

@dp.message(FormState.waiting_for_images, F.content_type == "photo")
async def process_images(message: Message, state: FSMContext):
    data = await state.get_data()
    photos = data.get("photos", [])
    photos.append(message.photo[-1].file_id)
    await state.update_data(photos=photos)
    await message.answer("Изображения успешно получены! Если закончили - отправьте /skip")

@dp.message(FormState.waiting_for_images, Command("skip"))
async def skip_images(message: Message, state: FSMContext, bot: Bot):
    await process_form(message, state, bot)

async def process_form(message: Message, state: FSMContext, bot: Bot):
    data = await state.get_data()
    await state.clear()
    await message.answer("Спасибо за вашу форму! Мы опубликуем новость как можно скорее.")
    await bot.send_message(chat_id=ADMIN_ID, 
                           text=f"Новая новость:\n"
                                f"User: {data.get('user', 'Не указан')}\n"
                                f"Заголовок: {data.get('title', 'Не указан')}\n"
                                f"Источник: {data.get('source', 'Не указан')}\n"
                           )
    for photo_id in data.get('photos', []):
        await bot.send_photo(chat_id=ADMIN_ID, photo=photo_id)


# initialize bot
async def on_bot_init(bot: Bot):
    commands = [
        BotCommand(command="/add", description="Предложить добавить новость"),
        BotCommand(command="/info", description="Контент план")
    ]
    await bot.set_my_commands(commands), BotCommandScopeDefault
    await bot.send_message(chat_id=ADMIN_ID, text="Бот встал")


# shutdown bot
async def on_bot_down(bot: Bot):
    await bot.send_message(chat_id=ADMIN_ID, text="Бот устал и упал")

# main function
async def main():

    logging.basicConfig(level=logging.INFO)

    dp.startup.register(on_bot_init)
    dp.shutdown.register(on_bot_down)

    bot = Bot(token=API_TOKEN)

    try:
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot)
    finally:
        await dp.session.close()

if __name__ == "__main__":
    asyncio.run(main())
